package com.lindroy.androidplayer.viewmodel

import androidx.lifecycle.MutableLiveData
import com.lindroy.androidplayer.base.viewmodel.BaseViewModel
import com.lindroy.androidplayer.extensions.request
import com.lindroy.androidplayer.extensions.yes
import com.lindroy.androidplayer.logic.model.ArticleResp
import com.lindroy.androidplayer.logic.model.BannerResp
import com.lindroy.androidplayer.logic.network2.state.ResultState
import com.lindroy.androidplayer.logic.network2.HttpRequestManager
import com.lindroy.androidplayer.logic.network2.apiService
import com.lindroy.androidplayer.logic.network2.statecallback.ListDataState

/**
 * @author Lin
 * @date 2021/4/22
 * @function
 * 1.首页文章列表 将返回的数据放在ViewModel中过滤包装给activity/fragment去使用
 * 2.首页轮播图 将返回的数据直接给activity/fragment去处理使用
 * 可以根据个人理解与喜好使用(建议 简单的不需要做数据过滤包装的能直接用返回数据的可以直接用2   复杂的需要自己封装一下让使用变的更方便的可以使用1  )
 */
class HomeDataViewModel : BaseViewModel() {
    /**
     * 页码，从0开始
     * 页码放在ViewModel中保存
     */
    private var pageNo = 0

    /**
     * 首页文章数据
     */
    var homeState: MutableLiveData<ListDataState<ArticleResp>> = MutableLiveData()

    /**
     * 轮播图数据
     */
    var bannerData:MutableLiveData<ResultState<List<BannerResp>>> =  MutableLiveData()

    /**
     * 获取首页文章
     */
    fun reqHomeArticles(isRefresh: Boolean) {
        isRefresh.yes { pageNo = 0 }
        request({ HttpRequestManager.getHomeArticles(pageNo) }, {
            homeState.value = ListDataState(
                success = true,
                isRefresh = isRefresh,
                isEmpty = it.isEmpty(),
                hasMore = it.hasMore(),
                isFirstEmpty = isRefresh && it.isEmpty(),
                listData = it.datas
            )
            pageNo++
        }, {
            homeState.value = ListDataState(
                success = false,
                isRefresh = isRefresh,
                errMessage = it.errorMsg,
                listData = arrayListOf()
            )
        })
    }

    /**
     * 获取轮播图
     */
    fun getBanner() {
        request({ apiService.getBanner()},bannerData)
    }
}